void
garmin_fs_xml_fprint(const waypoint* waypt,
- QXmlStreamWriter& writer)
+ QXmlStreamWriter* writer)
{
const char* phone, *addr;
garmin_fs_t* gmsd = GMSD_FIND(waypt);
WAYPT_HAS(waypt, proximity) ||
WAYPT_HAS(waypt, temperature) ||
gmsd->flags.display) {
- writer.writeStartElement("extensions");
- writer.writeStartElement("gpxx:WaypointExtension");
- writer.writeNamespace("http://www.garmin.com/xmlschemas/GpxExtensions/v3",
+ writer->writeStartElement("extensions");
+ writer->writeStartElement("gpxx:WaypointExtension");
+ writer->writeNamespace("http://www.garmin.com/xmlschemas/GpxExtensions/v3",
"gpxx");
if WAYPT_HAS(waypt, proximity) {
- writer.writeTextElement("gpxx:Proximity", QString::number(waypt->proximity, 'f', 6));
+ writer->writeTextElement("gpxx:Proximity", QString::number(waypt->proximity, 'f', 6));
}
if WAYPT_HAS(waypt, temperature) {
- writer.writeTextElement("gpxx:Temperature", QString::number(waypt->temperature, 'f', 6));
+ writer->writeTextElement("gpxx:Temperature", QString::number(waypt->temperature, 'f', 6));
}
if WAYPT_HAS(waypt, depth) {
- writer.writeTextElement("gpxx:Depth", QString::number(waypt->depth, 'f', 6));
+ writer->writeTextElement("gpxx:Depth", QString::number(waypt->depth, 'f', 6));
}
if (gmsd->flags.display) {
const char* cx;
cx = "SymbolAndName";
break;
}
- writer.writeTextElement("gpxx:DisplayMode", cx);
+ writer->writeTextElement("gpxx:DisplayMode", cx);
}
if (gmsd->flags.category && gmsd->category) {
int i;
uint16_t cx = gmsd->category;
- writer.writeStartElement("gpxx:Categories");
+ writer->writeStartElement("gpxx:Categories");
for (i = 0; i < 16; i++) {
if (cx & 1) {
- writer.writeTextElement("gpxx:Category", QString("Category %1").arg(i+1));
+ writer->writeTextElement("gpxx:Category", QString("Category %1").arg(i+1));
}
cx = cx >> 1;
}
- writer.writeEndElement(); // gpxx:Categories
+ writer->writeEndElement(); // gpxx:Categories
}
if (*addr) {
char* str;
- writer.writeStartElement("gpxx:Address");
+ writer->writeStartElement("gpxx:Address");
if ((str = GMSD_GET(addr, NULL))) {
- writer.writeTextElement("gpxx:StreetAddress", str);
+ writer->writeTextElement("gpxx:StreetAddress", str);
}
if ((str = GMSD_GET(city, NULL))) {
- writer.writeTextElement("gpxx:City", str);
+ writer->writeTextElement("gpxx:City", str);
}
if ((str = GMSD_GET(state, NULL))) {
- writer.writeTextElement("gpxx:State", str);
+ writer->writeTextElement("gpxx:State", str);
}
if ((str = GMSD_GET(country, NULL))) {
- writer.writeTextElement("gpxx:Country", str);
+ writer->writeTextElement("gpxx:Country", str);
}
if ((str = GMSD_GET(postal_code, NULL))) {
- writer.writeTextElement("gpxx:PostalCode", str);
+ writer->writeTextElement("gpxx:PostalCode", str);
}
- writer.writeEndElement(); // /gpxx::Address
+ writer->writeEndElement(); // /gpxx::Address
}
if (*phone) {
- writer.writeTextElement("gpxx:PhoneNumber", phone);
+ writer->writeTextElement("gpxx:PhoneNumber", phone);
}
- writer.writeEndElement(); // /gpxx::WaypointExtension
- writer.writeEndElement(); // /extensions.
+ writer->writeEndElement(); // /gpxx::WaypointExtension
+ writer->writeEndElement(); // /extensions.
}
}
static gbfile* fd;
static const char* input_fname;
static gbfile* ofd = NULL;
-static QFile oqfile;
-static gpsbabel::XmlStreamWriter writer(oqfile);
+static QFile* oqfile;
+static gpsbabel::XmlStreamWriter* writer;
static short_handle mkshort_handle;
static const char* link_url;
static char* link_text;
if (!gpx_global || QUEUE_EMPTY(&ge->queue)) {
return;
}
- writer.writeStartElement(tag);
+ writer->writeStartElement(tag);
QUEUE_FOR_EACH(&ge->queue, elem, tmp) {
gep = BASE_STRUCT(elem, gpx_global_entry, queue);
- writer.writeCharacters(gep->tagdata);
+ writer->writeCharacters(gep->tagdata);
/* Some tags we just output once. */
if ((0 == strcmp(tag, "url")) ||
(0 == strcmp(tag, "email"))) {
break;
}
}
- writer.writeEndElement();
+ writer->writeEndElement();
}
mkshort_handle = NULL;
// QFile requires binary mode on Windows.
ofd = gbfopen(fname, "wb", MYNAME);
- oqfile.open(ofd->handle.std, QIODevice::WriteOnly);
+ oqfile = new QFile;
+ oqfile->open(ofd->handle.std, QIODevice::WriteOnly);
- writer.setAutoFormattingIndent(2);
- writer.setCodec("UTF-8");
- writer.writeStartDocument();
+ writer = new gpsbabel::XmlStreamWriter(oqfile);
+ writer->setAutoFormattingIndent(2);
+ writer->setCodec("UTF-8");
+ writer->writeStartDocument();
}
static void
gpx_wr_deinit(void)
{
- writer.writeEndDocument();
- oqfile.close();
+ writer->writeEndDocument();
+ delete writer;
+ writer = NULL;
+ oqfile->close();
+ delete oqfile;
+ oqfile = NULL;
gbfclose(ofd);
ofd = NULL;
pa = tag->attributes;
if (pa) {
while (*pa) {
- writer.writeAttribute(pa[0], pa[1]);
+ writer->writeAttribute(pa[0], pa[1]);
pa += 2;
}
}
fprint_xml_chain(xml_tag* tag, const waypoint* wpt)
{
while (tag) {
- writer.writeStartElement(tag->tagname);
+ writer->writeStartElement(tag->tagname);
if (!tag->cdata && !tag->child) {
write_tag_attributes(tag);
// No children? Self-closing tag.
- writer.writeEndElement();
+ writer->writeEndElement();
} else {
write_tag_attributes(tag);
if (tag->cdata) {
- writer.writeCharacters(tag->cdata);
+ writer->writeCharacters(tag->cdata);
}
if (tag->child) {
fprint_xml_chain(tag->child, wpt);
}
if (wpt && wpt->gc_data->exported.isValid() &&
strcmp(tag->tagname, "groundspeak:cache") == 0) {
- writer.writeTextElement("time",
+ writer->writeTextElement("time",
wpt->gc_data->exported.toPrettyString());
}
- writer.writeEndElement();
+ writer->writeEndElement();
}
if (tag->parentcdata) {
// FIXME: The length check is necessary to get line endings correct in our test suite.
// Writing the zero length string eats a newline, at least with Qt 4.6.2.
if (tag->parentcdatalen > 0) {
- writer.writeCharacters(tag->parentcdata);
+ writer->writeCharacters(tag->parentcdata);
}
}
tag = tag->sibling;
if (gpx_wversion_num > 10) {
foreach(UrlLink l, waypointp->GetUrlLinks()) {
- writer.writeStartElement("link");
- writer.writeAttribute("href", l.url_);
- writer.writeOptionalTextElement("text", l.url_link_text_);
- writer.writeEndElement();
+ writer->writeStartElement("link");
+ writer->writeAttribute("href", l.url_);
+ writer->writeOptionalTextElement("text", l.url_link_text_);
+ writer->writeEndElement();
}
return;
}
UrlLink l = waypointp->GetUrlLink();
- writer.writeTextElement("url", QString(urlbase) + QString(l.url_));
- writer.writeOptionalTextElement("urlname", QString(l.url_link_text_));
+ writer->writeTextElement("url", QString(urlbase) + QString(l.url_));
+ writer->writeOptionalTextElement("urlname", QString(l.url_link_text_));
}
/*
}
if (fix) {
- writer.writeTextElement("fix", fix);
+ writer->writeTextElement("fix", fix);
}
if (waypointp->sat > 0) {
- writer.writeTextElement("sat", QString::number(waypointp->sat));
+ writer->writeTextElement("sat", QString::number(waypointp->sat));
}
if (waypointp->hdop) {
- writer.writeTextElement("hdop", toString(waypointp->hdop));
+ writer->writeTextElement("hdop", toString(waypointp->hdop));
}
if (waypointp->vdop) {
- writer.writeTextElement("vdop", toString(waypointp->vdop));
+ writer->writeTextElement("vdop", toString(waypointp->vdop));
}
if (waypointp->pdop) {
- writer.writeTextElement("pdop", toString(waypointp->pdop));
+ writer->writeTextElement("pdop", toString(waypointp->pdop));
}
}
gpx_write_common_position(const waypoint* waypointp)
{
if (waypointp->altitude != unknown_alt) {
- writer.writeTextElement("ele", QString::number(waypointp->altitude, 'f', 6));
+ writer->writeTextElement("ele", QString::number(waypointp->altitude, 'f', 6));
}
QString t = waypointp->CreationTimeXML();
- writer.writeOptionalTextElement("time", t);
+ writer->writeOptionalTextElement("time", t);
}
static void
if ((opt_humminbirdext && (WAYPT_HAS(waypointp, depth) || WAYPT_HAS(waypointp, temperature))) ||
(opt_garminext && gpxpt_waypoint==point_type && (WAYPT_HAS(waypointp, temperature) || WAYPT_HAS(waypointp, depth))) ||
(opt_garminext && gpxpt_track==point_type && (WAYPT_HAS(waypointp, temperature) || WAYPT_HAS(waypointp, depth) || waypointp->heartrate != 0 || waypointp->cadence != 0))) {
- writer.writeStartElement("extensions");
+ writer->writeStartElement("extensions");
if (opt_humminbirdext) {
if (WAYPT_HAS(waypointp, depth)) {
- writer.writeTextElement("h:depth", toString(waypointp->depth * 100.0));
+ writer->writeTextElement("h:depth", toString(waypointp->depth * 100.0));
}
if (WAYPT_HAS(waypointp, temperature)) {
- writer.writeTextElement("h:temperature", toString(waypointp->temperature));
+ writer->writeTextElement("h:temperature", toString(waypointp->temperature));
}
}
switch (point_type) {
case gpxpt_waypoint:
if (WAYPT_HAS(waypointp, temperature) || WAYPT_HAS(waypointp, depth)) {
- writer.writeStartElement("gpxx:WaypointExtension");
+ writer->writeStartElement("gpxx:WaypointExtension");
if (WAYPT_HAS(waypointp, temperature)) {
- writer.writeTextElement("gpxx:Temperature", toString(waypointp->temperature));
+ writer->writeTextElement("gpxx:Temperature", toString(waypointp->temperature));
}
if (WAYPT_HAS(waypointp, depth)) {
- writer.writeTextElement("gpxx:Depth", toString(waypointp->depth));
+ writer->writeTextElement("gpxx:Depth", toString(waypointp->depth));
}
- writer.writeEndElement(); // "gpxx:WaypointExtension"
+ writer->writeEndElement(); // "gpxx:WaypointExtension"
}
break;
case gpxpt_route:
case gpxpt_track:
if (WAYPT_HAS(waypointp, temperature) || WAYPT_HAS(waypointp, depth) || waypointp->heartrate != 0 || waypointp->cadence != 0) {
// gpxtpx:TrackPointExtension is a replacement for gpxx:TrackPointExtension.
- writer.writeStartElement("gpxtpx:TrackPointExtension");
+ writer->writeStartElement("gpxtpx:TrackPointExtension");
if (WAYPT_HAS(waypointp, temperature)) {
- writer.writeTextElement("gpxtpx:atemp", toString(waypointp->temperature));
+ writer->writeTextElement("gpxtpx:atemp", toString(waypointp->temperature));
}
if (WAYPT_HAS(waypointp, depth)) {
- writer.writeTextElement("gpxtpx:depth", toString(waypointp->depth));
+ writer->writeTextElement("gpxtpx:depth", toString(waypointp->depth));
}
if (waypointp->heartrate != 0) {
- writer.writeTextElement("gpxtpx:hr", QString::number(waypointp->heartrate));
+ writer->writeTextElement("gpxtpx:hr", QString::number(waypointp->heartrate));
}
if (waypointp->cadence != 0) {
- writer.writeTextElement("gpxtpx:cad", QString::number(waypointp->cadence));
+ writer->writeTextElement("gpxtpx:cad", QString::number(waypointp->cadence));
}
- writer.writeEndElement(); // "gpxtpx:TrackPointExtension"
+ writer->writeEndElement(); // "gpxtpx:TrackPointExtension"
}
break;
}
}
- writer.writeEndElement(); // "extensions"
+ writer->writeEndElement(); // "extensions"
}
}
static void
gpx_write_common_description(const waypoint* waypointp, QString oname)
{
- writer.writeOptionalTextElement("name", oname);
+ writer->writeOptionalTextElement("name", oname);
// FIXME: the replace() nonsense here is to prevent bogus control
// characters from being embedded in the output stream. The only place
QString desc = QString::fromUtf8(waypointp->description);
desc = desc.replace(QRegExp("[\014-\032]"), " ");
- writer.writeOptionalTextElement("cmt", desc);
+ writer->writeOptionalTextElement("cmt", desc);
if (waypointp->notes && waypointp->notes[0]) {
QString note = QString::fromUtf8(waypointp->notes);
note = note.replace(QRegExp("[\014-\032]"), " ");
- writer.writeTextElement("desc", note);
+ writer->writeTextElement("desc", note);
} else {
- writer.writeOptionalTextElement("desc", QString::fromUtf8(waypointp->description));
+ writer->writeOptionalTextElement("desc", QString::fromUtf8(waypointp->description));
}
write_gpx_url(waypointp);
- writer.writeOptionalTextElement("sym", waypointp->icon_descr);
+ writer->writeOptionalTextElement("sym", waypointp->icon_descr);
}
static void
fs_xml* fs_gpx;
garmin_fs_t* gmsd; /* gARmIN sPECIAL dATA */
- writer.writeStartElement("wpt");
- writer.writeAttribute("lat", toString(waypointp->latitude));
- writer.writeAttribute("lon", toString(waypointp->longitude));
+ writer->writeStartElement("wpt");
+ writer->writeAttribute("lat", toString(waypointp->latitude));
+ writer->writeAttribute("lon", toString(waypointp->longitude));
oname = global_opts.synthesize_shortnames ?
mkshort_from_wpt(mkshort_handle, waypointp) :
} else {
gpx_write_common_extensions(waypointp, gpxpt_waypoint);
}
- writer.writeEndElement();
+ writer->writeEndElement();
}
static void
fs_xml* fs_gpx;
current_trk_head = rte;
- writer.writeStartElement("trk");
- writer.writeOptionalTextElement("name", QString::fromUtf8(rte->rte_name));
- writer.writeOptionalTextElement("desc", QString::fromUtf8(rte->rte_desc));
+ writer->writeStartElement("trk");
+ writer->writeOptionalTextElement("name", QString::fromUtf8(rte->rte_name));
+ writer->writeOptionalTextElement("desc", QString::fromUtf8(rte->rte_desc));
if (rte->rte_num) {
- writer.writeTextElement("number", QString::number(rte->rte_num));
+ writer->writeTextElement("number", QString::number(rte->rte_num));
}
if (gpx_wversion_num > 10) {
if (waypointp->wpt_flags.new_trkseg) {
if (!first_in_trk) {
- writer.writeEndElement();
+ writer->writeEndElement();
}
- writer.writeStartElement("trkseg");
+ writer->writeStartElement("trkseg");
}
- writer.writeStartElement("trkpt");
- writer.writeAttribute("lat", toString(waypointp->latitude));
- writer.writeAttribute("lon", toString(waypointp->longitude));
+ writer->writeStartElement("trkpt");
+ writer->writeAttribute("lat", toString(waypointp->latitude));
+ writer->writeAttribute("lon", toString(waypointp->longitude));
gpx_write_common_position(waypointp);
/* These were accidentally removed from 1.1 */
if (gpx_wversion_num == 10) {
if WAYPT_HAS(waypointp, course) {
- writer.writeTextElement("course", toString(waypointp->course));
+ writer->writeTextElement("course", toString(waypointp->course));
}
if WAYPT_HAS(waypointp, speed) {
- writer.writeTextElement("speed", toString(waypointp->speed));
+ writer->writeTextElement("speed", toString(waypointp->speed));
}
}
} else {
gpx_write_common_extensions(waypointp, gpxpt_track);
}
- writer.writeEndElement();
+ writer->writeEndElement();
}
static void
gpx_track_tlr(const route_head* rte)
{
if (!QUEUE_EMPTY(¤t_trk_head->waypoint_list)) {
- writer.writeEndElement();
+ writer->writeEndElement();
}
- writer.writeEndElement();
+ writer->writeEndElement();
current_trk_head = NULL;
}
gpx_route_hdr(const route_head* rte)
{
fs_xml* fs_gpx;
- writer.writeStartElement("rte");
- writer.writeOptionalTextElement("name", QString::fromUtf8(rte->rte_name));
- writer.writeOptionalTextElement("desc", QString::fromUtf8(rte->rte_desc));
+ writer->writeStartElement("rte");
+ writer->writeOptionalTextElement("name", QString::fromUtf8(rte->rte_name));
+ writer->writeOptionalTextElement("desc", QString::fromUtf8(rte->rte_desc));
if (rte->rte_num) {
- writer.writeTextElement("number", QString::number(rte->rte_num));
+ writer->writeTextElement("number", QString::number(rte->rte_num));
}
if (gpx_wversion_num > 10) {
{
const char* oname;
fs_xml* fs_gpx;
- writer.writeStartElement("rtept");
- writer.writeAttribute("lat", toString(waypointp->latitude));
- writer.writeAttribute("lon", toString(waypointp->longitude));
+ writer->writeStartElement("rtept");
+ writer->writeAttribute("lat", toString(waypointp->latitude));
+ writer->writeAttribute("lon", toString(waypointp->longitude));
oname = global_opts.synthesize_shortnames ?
mkshort_from_wpt(mkshort_handle, waypointp) :
} else {
gpx_write_common_extensions(waypointp, gpxpt_route);
}
- writer.writeEndElement();
+ writer->writeEndElement();
}
static void
gpx_route_tlr(const route_head* rte)
{
- writer.writeEndElement(); // Close rte tag.
+ writer->writeEndElement(); // Close rte tag.
}
static
track_disp_all(NULL, NULL, gpx_waypt_bound_calc);
if (waypt_bounds_valid(&all_bounds)) {
- writer.writeStartElement("bounds");
- writer.writeAttribute("minlat", toString(all_bounds.min_lat));
- writer.writeAttribute("minlon", toString(all_bounds.min_lon));
- writer.writeAttribute("maxlat", toString(all_bounds.max_lat));
- writer.writeAttribute("maxlon", toString(all_bounds.max_lon));
- writer.writeEndElement();
+ writer->writeStartElement("bounds");
+ writer->writeAttribute("minlat", toString(all_bounds.min_lat));
+ writer->writeAttribute("minlon", toString(all_bounds.min_lon));
+ writer->writeAttribute("maxlat", toString(all_bounds.max_lat));
+ writer->writeAttribute("maxlon", toString(all_bounds.max_lon));
+ writer->writeEndElement();
}
}
// to include just enough whitespace between <xml/> and <gpx...> to pass
// diff -w. It's here for now to shim compatibility with our zillion
// reference files, but this blank link can go away some day.
- writer.writeCharacters("\n");
+ writer->writeCharacters("\n");
- writer.setAutoFormatting(true);
- writer.writeStartElement("gpx");
- writer.writeAttribute("version", gpx_wversion);
- writer.writeAttribute("creator", CREATOR_NAME_URL);
- writer.writeAttribute("xmlns", QString("http://www.topografix.com/GPX/%1/%2").arg(gpx_wversion[0]).arg(gpx_wversion[2]));
+ writer->setAutoFormatting(true);
+ writer->writeStartElement("gpx");
+ writer->writeAttribute("version", gpx_wversion);
+ writer->writeAttribute("creator", CREATOR_NAME_URL);
+ writer->writeAttribute("xmlns", QString("http://www.topografix.com/GPX/%1/%2").arg(gpx_wversion[0]).arg(gpx_wversion[2]));
if (opt_humminbirdext || opt_garminext) {
if (opt_humminbirdext) {
- writer.writeAttribute("xmlns:h","http://humminbird.com");
+ writer->writeAttribute("xmlns:h","http://humminbird.com");
}
if (opt_garminext) {
- writer.writeAttribute("xmlns:gpxx", "http://www.garmin.com/xmlschemas/GpxExtensions/v3");
- writer.writeAttribute("xmlns:gpxtpx", "http://www.garmin.com/xmlschemas/TrackPointExtension/v1");
+ writer->writeAttribute("xmlns:gpxx", "http://www.garmin.com/xmlschemas/GpxExtensions/v3");
+ writer->writeAttribute("xmlns:gpxtpx", "http://www.garmin.com/xmlschemas/TrackPointExtension/v1");
}
} else {
- writer.writeAttributes(gpx_namespace_attribute);
+ writer->writeAttributes(gpx_namespace_attribute);
}
if (gpx_wversion_num > 10) {
- writer.writeStartElement("metadata");
+ writer->writeStartElement("metadata");
}
gpx_write_gdata(&gpx_global->name, "name");
gpx_write_gdata(&gpx_global->desc, "desc");
}
gpsbabel::DateTime now = current_time();
- writer.writeTextElement("time", now.toPrettyString());
+ writer->writeTextElement("time", now.toPrettyString());
gpx_write_gdata(&gpx_global->keywords, "keywords");
gpx_write_bounds();
if (gpx_wversion_num > 10) {
- writer.writeEndElement();
+ writer->writeEndElement();
}
gpx_reset_short_handle();
gpx_route_pr();
gpx_reset_short_handle();
gpx_track_pr();
- writer.writeEndElement(); // Close gpx tag.
+ writer->writeEndElement(); // Close gpx tag.
}